package com.zhoupu.file.core.config;

import com.zhoupu.file.core.customerconst.ChannelName;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.dsl.IntegrationFlow;
import org.springframework.integration.dsl.IntegrationFlows;
import org.springframework.integration.file.dsl.Files;
import org.springframework.integration.file.support.FileExistsMode;

import java.io.File;


/**
 * 文件写入流配置
 *
 * @author Zhouyongli
 * @version 2024/09/11 16:13
 **/
@Configuration
public class FileWriterIntegrationConfig {

    private final String filePath = "logs";

//    /**
//     * 配置消息通道 ChannelName.TEXT_IN_CHANNEL
//     * @return
//     */
//    @Bean
//    public MessageChannel textInChannel(){
//        return new DirectChannel();
//    }
//
//    /**
//     * 配置消息通道 ChannelName.FILE_WRITE_CHANNEL
//     * @return
//     */
//    @Bean
//    public MessageChannel fileWriteChannel(){
//        return new DirectChannel();
//    }
//
//    /**
//     * 配置消息处理方式
//     * @return
//     */
//    @Bean
//    @Transformer(inputChannel = ChannelName.TEXT_IN_CHANNEL, outputChannel = ChannelName.FILE_WRITE_CHANNEL)
//    public GenericTransformer<String, String> upperCaseTransformer(){
//        return String::toUpperCase;
//    }
//
//
//    /**
//     * 配置服务激活器，处理消息
//     * @return
//     */
//    @Bean
//    @ServiceActivator(inputChannel = ChannelName.FILE_WRITE_CHANNEL)
//    public FileWritingMessageHandler fileWrite(){
//
//        FileWritingMessageHandler fileWritingMessageHandler = new FileWritingMessageHandler(new File(filePath));
//
//        fileWritingMessageHandler.setExpectReply(false); // 设置没有答复通道，没有返回值
//        fileWritingMessageHandler.setFileExistsMode(FileExistsMode.APPEND); // 文件存在，采用追加的模式
//        fileWritingMessageHandler.setAppendNewLine(true); // 设置可以追加新行
//
//        return fileWritingMessageHandler;
//    }


    @Bean
    public IntegrationFlow FileWriteIntegrationFlow(){
        return IntegrationFlows.from(ChannelName.TEXT_IN_CHANNEL) // 配置消息通道 ChannelName.TEXT_IN_CHANNEL,输入流
                .channel(ChannelName.FILE_WRITE_CHANNEL)          // 配置消息通道 ChannelName.FILE_WRITE_CHANNEL,输出流
                .<String, String>transform(String::toUpperCase)   // 配置消息处理方式
                .handle(                                          // 输出流处理方式
                        Files.outboundAdapter(new File(filePath)) // 创建文件[文件不存在则创建，文件内容换行追加]
                                .fileExistsMode(FileExistsMode.APPEND)
                                .appendNewLine(true)
                )
                .get();
    }



}
